Stackdriver Logging → BigQuery
日本語ではなぜか "シンク" という名前になっているが英語では単に "Export"
"高度なフィルタ" で GAE からのアプリケーションログとログの属性でフィルタする
https://gyazo.com/fab5be266314ed9aabf764f2d924b6c0
ワンタイムではなくルールを作っておくと以後のデータはエクスポートされる
GAE の stdout に出したログのうち、jsonPayload.field1 が空でないもののフィルタ例 https://gyazo.com/26dcc04e9de2674b96cbf418f27ee5a9
BigQuery のデータセット名を指定してエクスポートできる
Export 設定の UI からデータセットを作成するのでなく先に BigQuery 側で作って選ぶほうがよさそう
リージョンがいつのまにか US になってたりするため
テーブル名は logId
logName の形式は projects/{project}/logs/{}
スキーマ
UUID_SHORT のような値は文字列で送るのがいい、Float になって精度落ちてしまう、INT64 は signed
型が気に食わない場合
epoch を入れているのに INT64 でなく FLOAT になってしまうなど
あとから置き換える
先に部分的なスキーマを作る
パーティショニング
データの timestamp と BigQuery に到着した時間の差がありうるので、例えば日付ギリギリの行はどちらのパーティションに行くか曖昧だと思っていた
でもそうでもなさそう?
code:query.sql
SELECT
MIN(jsonPayload.time), MAX(jsonPayload.time),
MIN(timestamp), MAX(timestamp),
FROM xxx.appengine_googleapis_com_stdout
WHERE DATE(_PARTITIONTIME) = "2020-01-01"
パーティショニングが GA した
ログの timestamp フィールドが _PARTITIONTIME に入るようになった
英語のドキュメントでは言及があった
2020/2/18 いつのまにかパーティショニングテーブルが、カラムパーティショニングになっている?? 確認中
先週変わったっぽい